﻿using AutoUpdaterDotNET;
using CtyProject.UserControls;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Windows.Forms;

namespace CtyProject
{
    public partial class FormMain : DevExpress.XtraEditors.XtraForm
    {
        private PageLogUc pageLogUc;
        private PaintUc paintUc;
        private PythonUc pythonUc;
        public FormMain()
        {
            InitializeComponent();
        }



        private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            multiThreadRefreshUc1.ChangeRefreshUi();
            //绑定委托方法
            //multiThreadRefreshUc1.showTaskResult = ShowTaskValue;
            multiThreadRefreshUc1.showTaskResult += (string value) => {
                this.labelControl1.Text = value;
            };
            //multiThreadRefreshUc1.showTaskResult.Invoke("111");
            //子线程委托变量改成事件，无法invoke，增加安全性
        }

        private void barButtonItem2_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (pageLogUc == null)
            {
                pageLogUc = new PageLogUc();
            }
            //自定义控件显示方式
            pageLogUc.Dock = DockStyle.Fill;
            panelControl3.Controls.Clear();
            panelControl3.Controls.Add(pageLogUc);
        }

        private void barButtonItem3_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if(paintUc == null)
            {
                paintUc = new PaintUc();
            }
            paintUc.Dock = DockStyle.Fill;
            panelControl3.Controls.Clear();
            panelControl3.Controls.Add(paintUc);
        }

        private void barButtonItem4_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if(pythonUc == null)
            {
                pythonUc = new PythonUc(); 
            }
            pythonUc.Dock = DockStyle.Fill;
            panelControl3.Controls.Clear();
            panelControl3.Controls.Add(pythonUc);
        }

        //更新思路:下载最新的update.xml，里面存放版本信息，如果当前版本(在Properties的Assemblylnfo.cs文件中版本信息AssemblyVersion)
        //小于update文件中的指定版本再调用里面的链接更新
        private void barButtonItem5_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            //引入Autoupdater.NET.Official包
            AutoUpdater.Start("http://hongxianji.com/basictool/update.xml");
            // 若您不想在更新表单上显示“跳过”按钮，那个么只需在上面的代码中添加以下行即可。
            AutoUpdater.ShowSkipButton = false;

            // 如果要同步检查更新，请在启动更新之前将 Synchronous 设置为 true，如下所示。
            AutoUpdater.Synchronous = false;

            // 显示“以后提醒”按钮，那个么只需在上面的代码中添加以下一行即可。
            AutoUpdater.ShowRemindLaterButton = true;

            //如果要忽略先前设置的“以后提醒”和“跳过”设置，则可以将“强制”属性设置为 true。
            //它还将隐藏“跳过”和“稍后提醒”按钮。如果在代码中将强制设置为true，那么XML文件中的强制值将被忽略。
            AutoUpdater.Mandatory = false;

            //您可以通过添加以下代码来打开错误报告。如果执行此自动更新程序。NET 将显示错误消息，如果没有可用的更新或无法从 web 服务器获取 XML 文件。
            AutoUpdater.ReportErrors = true;

            // 如果服务器 xml 文件的版本大于 AssemblyInfo 中的版本则触发 CheckForUpdateEvent
            AutoUpdater.CheckForUpdateEvent += (args) =>
            {
                if (args.Error == null)
                {
                    // 检测到有可用的更新
                    if (args.IsUpdateAvailable)
                    {
                        DialogResult dialogResult;
                        if (args.Mandatory.Value)
                        {
                            dialogResult =
                                MessageBox.Show(
                                $@"当前有一个新版本{args.CurrentVersion}可用.你正在使用版本{args.InstalledVersion}.点击确认开始更新", @"更新可用",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
                        }
                        else
                        {
                            dialogResult =
                                MessageBox.Show(
                                $@"当前有一个新版本{args.CurrentVersion}可用.你正在使用版本{args.InstalledVersion}.确认要更新吗?", @"更新可用",
                                MessageBoxButtons.YesNo,
                                MessageBoxIcon.Information);
                        }

                        if (dialogResult.Equals(DialogResult.Yes) || dialogResult.Equals(DialogResult.OK))
                        {
                            try
                            {
                                // 触发更新下载
                                if (AutoUpdater.DownloadUpdate(args))
                                {
                                    Application.Exit();
                                }
                            }
                            catch (Exception exception)
                            {
                                MessageBox.Show(exception.Message, exception.GetType().ToString(), MessageBoxButtons.OK,
                                                    MessageBoxIcon.Error);
                            }
                        }
                    }
                }
                else
                {
                    if (args.Error is WebException)
                    {
                        MessageBox.Show(
                            @"连接更新服务器失败,请检查网络连接.",
                            @"更新检查失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        MessageBox.Show(args.Error.Message,
                                            args.Error.GetType().ToString(), MessageBoxButtons.OK,
                                            MessageBoxIcon.Error);
                    }
                }
            };
        }

        private void FormMain_Load(object sender, EventArgs e)
        {
            barStaticItemVersion.Caption = "版本: " + Application.ProductName+" " + Application.ProductVersion;
        }
    }
    
}
